(function () {
  // # 类型查询操作符：熟悉又陌生的 typeof
  //  TypeScript 还新增了用于类型查询的 typeof ，即 Type Query Operator，这个 typeof 返回的是一个 TypeScript 类型：

  const str = 'lys';
  const obj = { name: 'lys' }

  const nullVar = null;

  const undefinedVar = undefined;

  const func = (input: string) => {
    return input.length > 10;
  }

  type Str = typeof str;   // 'lys'
  type Obj = typeof obj;  // { name: string; }
  type Null = typeof nullVar; // null
  type Undefined = typeof undefined; // undefined
  type Func = typeof func; // (input: string) => boolean

  //你不仅可以直接在类型标注中使用 typeof，还能在工具类型中使用 typeof。
  const func1 = (input: string) => {
    return input.length > 0;
  }

  const func2: typeof func = (name: string) => {
    return name === 'lys'
  }
  const func2_0: Func = (name: string) => {
    return name === 'lys'
  }

  // 暂时不用深入了解 ReturnType 这个工具类型,只需要知道它会返回一个函数类型中返回值上位置的类型：
  type FuncReturnType = ReturnType<typeof func>



  // $ 类型查询操作符后是不允许使用表达式的
  const isInputValid = (input: string) => {
    return input.length > 10;
  };
  // type test = typeof isInputValid("linbudu");  // 不允许使用表达式的


}())
